package main

import (
	"fmt"
	"time"
)

func main() {
	/*
		goroutine 是实际并发执行的实体，它的底层是使用协程实现并发的
		一个goroutine打印数字，另一个goroutine打印字符，观察运行结果

			用户级线程和协程在某些方面是相似的，但它们并不完全等价。
			用户级线程（User-level threads）是由应用程序实现的，而不是由操作系统内核实现的。应用程序可以使用线程库来创建和管理线程，而这些线程仅在应用程序的进程上下文中运行。由于用户级线程是由应用程序实现的，因此它们不能利用多个处理器或处理器核心来同时执行多个任务。
			协程（Coroutine）是一种更轻量级的线程，通常在单个线程内执行。协程通过在一个任务暂停时切换到另一个任务来实现并发性。与用户级线程不同，协程不需要进行线程上下文切换，并且可以在单个线程内高效地执行。
			因此，虽然用户级线程和协程在某些方面具有相似的行为和实现方法，但它们在实现细节和可用性方面存在差异，不能视为完全等价。
	*/
	//1.先创建并启动子goroutine，执行printNum()
	go printNum()

	//2.main中打印字母
	for i := 1; i <= 100; i++ {
		fmt.Printf("\t主goroutine中打印字母：A,%d\n", i)
	}

	time.Sleep(time.Second)
	fmt.Println("main...over...")
}

func printNum() {
	for i := 1; i <= 100; i++ {
		fmt.Println("子goroutine中打印数字：%d\n", i)
	}
}
